using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 标记类为可序列化
[System.Serializable]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver
{
    // 序列化字段，用于存储键和值的列表
    [SerializeField] private List<TKey> keys = new List<TKey>();
    [SerializeField] private List<TValue> values = new List<TValue>();

    // 在序列化之前调用
    public void OnBeforeSerialize()
    {
        // 清空键和值的列表
        keys.Clear();
        values.Clear();

        // 将字典中的键和值添加到列表中
        foreach (KeyValuePair<TKey, TValue> pair in this)
        {
            keys.Add(pair.Key);
            values.Add(pair.Value);
        }
    }

    // 在反序列化之后调用
    public void OnAfterDeserialize()
    {
        // 清空字典
        this.Clear();

        // 检查键和值的数量是否匹配
        if (keys.Count != values.Count)
        {
            Debug.Log("键和值的数量对不上");
        }
        
        // 将列表中的键和值添加到字典中
        for (int i = 0; i < keys.Count; i++)
        {
            this.Add(keys[i], values[i]);
        }
    }
}